Conversation
There was a problem hiding this comment.
Note
This report is out of date. Scroll down for Devin Review's latest report on this PR.
🔍 Devin Review: 1 flag
Not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
be915d5 to
30625f3
Compare
|
Ready for maintainer review at 30625f3.
@tinalenguyen, would you be able to take a look? You reviewed the recent Runway and Protoface Avatar plugin contributions. |
|
@tinalenguyen, following up on this Boson Avatar plugin contribution. I've merged current The latest code fixes both new public Devin findings: close can no longer spin on a completed startup-cleanup task while its callback is queued, and an avatar identity matching the agent is rejected before token issuance or provider creation. Regression tests reproduced both problems before the fixes and now pass, including DELETE retry after failed startup cleanup. All GitHub checks on Validation on the updated branch:
The three earlier public security review threads remain resolved. The plugin continues to compose with the existing AgentSession audio pipeline, with no Boson audio dependency or hard-coded provider endpoint. Could you review this, or help route it to the appropriate avatar-plugin maintainer? I can address any further changes. If there are provider-onboarding or release requirements beyond the code review, please let me know what is needed. Devin also mentions a finding hidden by the repository's GitHub settings; if it remains actionable, could you share it here so I can address it? |
|
Hi @longcw, would you have time to review this Boson Avatar plugin when convenient? I noticed you reviewed the Spatius integration (#5821) and the recent Avatar audio-stream recovery fix (#7007), so your perspective on the session lifecycle and audio routing would be especially helpful. The PR is updated with I'd appreciate any feedback and am happy to make changes to align with the existing Avatar plugins. If someone else is better placed to review this, a pointer would be very helpful. Thank you! |
99757f3 to
bfdaae0
Compare
|
Hi @livekit/agent-devs — could someone help route this PR to a specific maintainer for review, or let me know who should own it? The current head has no merge conflicts, and CI, CLA, and Devin Review are passing. I previously asked individual avatar-plugin maintainers, but I may be missing the right owner. If accepting a new third-party avatar plugin requires additional provider-onboarding steps or a reproducible live validation path, could you point me to those requirements? I can provide a staging walkthrough or test access privately and address any feedback. Thank you! |
|
hi @warlockee, thanks for reaching out and being proactive! we have a queue for plugin submissions, could you submit this form so we can expedite the integration process? |
|
Thanks @tinalenguyen! We have submitted the LiveKit Plugin Partner Submission form for this Boson Avatar plugin. Please let us know if the team needs any additional details, a staging walkthrough, or test access during review. We are happy to help. |
tinalenguyen
left a comment
There was a problem hiding this comment.
could we also bump the version to latest?
i also was not able to test this plugin, it seems that the realtime avatar service is still gated. i will follow up via email to facilitate access for the team
| @@ -0,0 +1 @@ | |||
|
|
|||
There was a problem hiding this comment.
Thanks — removed the unnecessary py.typed marker in 23d4580. The Boson tests, Ruff, formatting, and package mypy checks pass.
There was a problem hiding this comment.
Follow-up: I restored py.typed in a2179f8 because the repository type-check failed explicitly with “Package livekit.plugins.boson_avatar cannot be type checked due to missing py.typed marker.” The CI-style package-mode mypy check now passes for Boson. I’m reopening this thread so the required marker is clear.
There was a problem hiding this comment.
Devin Review found 1 new potential issue.
⚠️ 1 issue in files not directly in the diff
⚠️ Installed plugin loses type information
Without py.typed, type checkers treat the installed Boson plugin as untyped. Consumers lose checks for its annotated public API.
1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)
|
Thanks for flagging this. The py.typed marker is restored in a2179f8; removing it reproduced the package-discovery failure in scripts/check_types.py. The CI-style Boson package mypy check passes, and the fresh Python 3.10/3.13 type checks and all remaining CI checks are green. |
|
Hi @tinalenguyen — following up on the live test now that test access has been provided. Were you able to access the realtime Avatar service, or is anything still blocking the test? The requested code updates have been addressed and the latest CI is green. If you run into any access or setup issue, please let us know and we can help right away (and handle any credential details privately). Thank you! |
Summary
livekit-plugins-boson-avatar, a BYOK Avatar plugin for Boson Higgs Audio-Driven AvatarAgentSessionvoice pipeline instead of creating a second voice participantlivekit-agents[boson-avatar]optional dependenciesDeveloper experience
The host application is the composition root: it supplies its Boson endpoint and API key, loads the project catalog server-side, and passes the Avatar selected by its UI to the session.
api_urlmay alternatively be supplied throughBOSON_AVATAR_API_URL;BOSON_API_KEYsupplies the API key. The plugin intentionally does not define or assume a production hostname. It accepts the audio output of any compatibleAgentSessionvoice pipeline and has no dependency on a Boson audio model. The URL must be an HTTPS base URL (loopback HTTP is allowed for local development); the plugin appends/avatarsand the session resource paths.list_avatars()owns its short-lived HTTP client, so it also works in a normal application server outside a LiveKit job context.Validation
uv run ruff format --check .anduv run ruff check .— passeduv run python scripts/check_types.py— passed strict mypycan_subscribe=False, Avatar joined, targeted PCM streamed, audio and video tracks published, and DELETE cleanup returned all four GPU workers to idleIntegration boundary
Deployment of a compatible Boson Avatar endpoint is an application/provider concern, not a plugin release dependency. The host app owns endpoint selection and composes the voice pipeline, Avatar plugin, LiveKit room, API credentials, and Avatar selection. The browser receives only catalog display data; the provider URL and Boson API key stay server-side.
The provider should retain its project-scoped catalog plus room-disconnect and max-duration reapers for process-kill and lost-response boundaries where a client can never receive the provider session ID.